<?php
/**
 * Introduction: 短信发送
 * @author: 杨陈鹏
 * @date: 2016/4/05 16:04
 * @email: yangchenpeng@cdlinglu.com
 */

namespace Think\SMS;


class Moble
{


    private $api,$sms_type;

    public function __construct()
    {

        $this->api = C('SMS_CONFIG.SMS_API'); //短信接口的URL

        $this->sms_type = C('SMS_CONFIG.SMS_API_TYPE'); //短信接入商

    }

    /**
     * Introduction: 发送短信
     * @author: 杨陈鹏
     * @date: 2016/4/05 16:04
     * @email: yangchenpeng@cdlinglu.com
     * @param: int or string $moble 接受短信的手机号码
     * @param: string $message 模板变量及信息 (聚合的格式: #code#=1234&#company#=聚合数据 ) 根据实际情况而定
     * @param: int $tpl_id 模板ID   默认调用配置里面设置的
     * @return: array
     */
    public function send($moble,$message,$tpl_id)
    {

        switch($this->sms_type)
        {

            case 'juhe':

                if(!$moble || !$message)
                    return ['code' =>300 ,'msg' => '参数错误'];

                $config = array(
                    'key'   => C('SMS_CONFIG.SMS_API_KEY'), //您申请的APPKEY
                    'mobile'    => $moble, //接受短信的用户手机号码
                    'tpl_id'    => $tpl_id ? $tpl_id : C('SMS_CONFIG.SMS_API_TPL_ID'), //服务商模板ID
                    'tpl_value' => $message //短信模板变量
                );

                $result = $this->juhe_send($this->api,$config,1);

                if($result){

                    $result = json_decode($result,true);

                    $error_code = $result['error_code'];

                    if($error_code == 0){

                        //状态为0，说明短信发送成功
                        return ['code' =>200 ,'msg' => "短信发送成功,短信ID：".$result['result']['sid']];

                    }else{

                        //状态非0，说明失败
                        $msg = $result['reason'];

                        return ['code' =>300 ,'msg' => "短信发送失败(".$error_code.")：".$msg];
                    }
                }else{

                    //返回内容异常，以下可根据业务逻辑自行修改
                    return ['code' =>300 ,'msg' => '短信发送失败'];

                }

                break;
            case 'juchen':

                $post_data = array(

                    "account"=> C("SMS_CONFIG.SMS_API_ACCOUNT"),

                    "pswd"=> C("SMS_CONFIG.SMS_API_PASSWD"),

                    "mobile"=> $moble,

                    "msg"=> "您好,你的验证码:$message【令鹿科技】",

                    "needstatus"=>"true",

                    "product"=>''

                );

                $result = $this->jucheng_send($this->api,$post_data);

                return $result;

                break;

            default:

                return ['code' => 300, 'msg' => '未指定服务商家'];

                break;

        }

    }

    /**
     * 请求接口返回内容
     * @param  string $url [请求的URL地址]
     * @param  string $params [请求的参数]
     * @param  int $ipost [是否采用POST形式]
     * @return  string
     */
    private function juhe_send($url,$params=false,$ispost=0){
        $httpInfo = array();
        $ch = curl_init();

        curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
        curl_setopt( $ch, CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22' );
        curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 30 );
        curl_setopt( $ch, CURLOPT_TIMEOUT , 30);
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
        if( $ispost )
        {
            curl_setopt( $ch , CURLOPT_POST , true );
            curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
            curl_setopt( $ch , CURLOPT_URL , $url );
        }
        else
        {
            if($params){
                curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
            }else{
                curl_setopt( $ch , CURLOPT_URL , $url);
            }
        }
        $response = curl_exec( $ch );
        if ($response === FALSE) {
            //echo "cURL Error: " . curl_error($ch);
            return false;
        }
        $httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
        $httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
        curl_close( $ch );
        return $response;
    }
    /**
     *   注意事项
     *     1.post数据不需要urldecode,msg字段的内容要为utf-8格式,尽量不要get方式提交
     *     2.短信内容需要为正规的业务内容,不能乱发内容,不能乱测.否则发送失败,可以发送通知、验证码和祝福等短信，具体的发送内容咨询商务
     *     3.短信尾端需要加上签名,签名一般为客户公司简称比如 “【巨辰科技】”、“【阿里云】”、“【网易】”
     *     4.短信发送有防轰炸过滤,一个号码一分钟不要超过2条,一天内不要超过8条,多次测试请换号码测试,狂发将被拉黑名单
     *     5.收不到短信的号码最为常见的是被运营商加入“黑名单”,联系我们客服解除即可,未解除之前请换号码测试
     *     6.测试短信内容例子：“您好,你的验证码:168458，请注意保管【巨辰科技】”
     *
     **/
    private function jucheng_send($url,$post_data){

        $ch = curl_init();

        $timeout = 20;
        /** 有些curl版本的post这样的数据格式 **/
        //$post_data = "account=账号&pswd=密码&mobile=手机号码1,号码2,号码3,后面以此类推&msg=您好,你的验证码:8888【巨辰科技】&needstatus=true&product=";

        //有些curl版本的curl数据格式为数组   你们接入时要注意
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //post数据
        curl_setopt($ch, CURLOPT_POST, 1);
        //post的变量
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        $file_contents = curl_exec($ch);
        curl_close($ch);
        return $file_contents;
    }

}